<!DOCTYPE html>
<!--
@File   : test.html.html
@Author : Richard ({__email})
@Link   : http://www.gistop.com/
@Date   : 2018-7-10 01:25:05
-->
<html>
<head>
<title></title>
<script>
    function checkTURNServer(turnConfig, timeout){
    return new Promise(function(resolve, reject){
 
      setTimeout(function(){
        if(promiseResolved) return;
        resolve(false);
        promiseResolved = true;
      }, timeout || 5000);
 
      var promiseResolved = false
        , myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection   //compatibility for firefox and chrome
        , pc = new myPeerConnection({iceServers:[turnConfig]})
        , noop = function(){};
      pc.createDataChannel("");    //create a bogus data channel
      pc.createOffer(function(sdp){
        if(sdp.sdp.indexOf('typ relay') > -1){ // sometimes sdp contains the ice candidates...
          promiseResolved = true;
          resolve(true);
        }
        pc.setLocalDescription(sdp, noop, noop);
      }, noop);    // create offer and set local description
      pc.onicecandidate = function(ice){  //listen for candidate events
        console.log(ice);
        if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf('typ relay')>-1))  return;
        promiseResolved = true;
        resolve(true);
      };
    });
 
  }
  checkTURNServer({
    urls: 'turn:www.gismall.com:3478',  // A TURN server
    username: "root",
    credential: "123456"
  }).then(function(bool){
    console.log('is my TURN server active? ', bool? 'yes':'no');
  }).catch(console.error.bind(console));
</script>
</head>
<body>
</body>
</html>
